/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.gest.manager;

import com.brain.core.common.UtilCore;
import com.brain.core.configuracion.WebServletContextListener;
import com.brain.core.manager.*;
import com.brain.core.exception.DAOException;
import com.brain.core.hibernate.dao.DAOGenerico;
import com.brain.core.view.mbean.SessionMBean;

import com.brain.desa.view.util.ConstantesDesa;
import com.brain.gest.dto.GestionTalentoDto;
import com.brain.gest.dto.GestionTalentoPersonaDto;
import com.brain.sgc.view.util.ConstantesSgc;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
/**
 * @author Greip Company
 * @since 29/01/2014
 * @version 1.0
 */
@Service
public class GestionTalentoPersonaManager extends ComunManager<GestionTalentoPersonaDto> implements Serializable {
  /**
     * Objeto que permite el acceso a la capa de datos
     *
     * @since 29/01/2014
     */
    @Resource
    private DAOGenerico<GestionTalentoPersonaDto> springHibernateDao;
     /**
     * Guarda las acciones del sistema en un archivo de texto plano
     *
     * @since 29/01/2014
     */
    private static Logger logger = Logger.getLogger(GestionTalentoPersonaManager.class);
    	 /**
     * Objeto de la clase RecursosManager (acceso a metodos utilitarios)
     *
     * @since 29/01/2014
     */

    @Resource
    private RecursosManager recursosManager;
/**
     * Metodo que obtiene un Dto
     *
     * @since 29/01/2014
     * @param id identificador o codigo en la tabla a obtener
     * @return retorna un Dto lleno de datos en caso que encuentre coincidencias
     * con el parámetro enviado
     */ 
    public GestionTalentoPersonaDto obtenerPorId(Long id) throws DAOException {
        return springHibernateDao.obtenerDtoPorId(GestionTalentoPersonaDto.class, id);
    }
 /**
     * Metodo que obtiene todos los datos coincidentes con el filtro , además
     * permite manejar el orden de los datos
     *
     * @since 29/01/2014
     * @param filtros es el objeto de la Interfaz Map , que envía un mapa con 2
     * parámetros
     * @param orden es el objeto de la Interfaz Map , que envía un mapa con 2
     * parámetros
     * @return retorna una lista con todos los datos de la entidad coincidentes
     * con el filtro ordenado manualmente
     */
    public List<GestionTalentoPersonaDto> obtenerConFiltroConOrden(Map<String, Object> filtros, Map<String, String> orden) throws DAOException {
        return springHibernateDao.obtenerDtosConFiltrosConOrden(GestionTalentoPersonaDto.class, filtros, orden);
    }
    /**
     * Metodo que permite obtener una persona por el filtro seleccionado (Objeto GestionTalentoDto)
     * @since 29/01/2014
     * @param dto objeto de la clase GestionTalentoDto
     * @return retorna una lista de GestionTalentoPersonaDto
     * @throws DAOException 
     */
    public List<GestionTalentoPersonaDto> obtenerPersonaSeleccionada(GestionTalentoDto dto) throws DAOException {
        Map<String, Object> filtros = new HashMap<String, Object>();
        filtros.put("gestionTalentoDto.id", dto.getId());
        Map<String, String> mapOrden = new HashMap<String, String>();
        mapOrden.put("promedio", "desc");
        return springHibernateDao.obtenerDtosConFiltrosConOrden(GestionTalentoPersonaDto.class, filtros, mapOrden);
    }
    /**
     * Metodo que permite obtener una lista de la clase GestionTalendoPersonaDto por el id de una persona
     * @since 29/01/2014
     * @param idPerson identificador de la persona a filtrar 
     * @return retorna una lista de la clase GestionTalendoPersonaDto
     * @throws DAOException 
     */
    public List<GestionTalentoPersonaDto> obtenerListaPorPersonaId(Long idPerson) throws DAOException {
        List<Object> listaParametros = new ArrayList<Object>();

        String hqsql = "select e from GestionTalentoPersonaDto as e where ";
        hqsql += "personaDto.id = ? ";
        listaParametros.add(idPerson);
        return springHibernateDao.ejecutarQuery(hqsql, listaParametros);
    }
        /**
     * Metodo que permite obtener una lista de la clase GestionTalendoPersonaDto por el id
     * @since 29/01/2014
     * @param idPerson identificador de la persona a filtrar 
     * @return retorna una lista de la clase GestionTalendoPersonaDto
     * @throws DAOException 
     */
    public List<GestionTalentoPersonaDto> obtenerListaPorId(Long idPerson) throws DAOException {
        List<Object> listaParametros = new ArrayList<Object>();

        String hqsql = "select e from GestionTalentoPersonaDto as e where ";
        hqsql += "id = ? ";
        listaParametros.add(idPerson);
        return springHibernateDao.ejecutarQuery(hqsql, listaParametros);
    }
    
    public String guardar(GestionTalentoPersonaDto dto) {
        String to = null;
        String mensajeTrx = "";
        SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
        if (sessionMBean.getAccion() == ConstantesDesa.Formulario.NUEVO) {
            try {
                dto.setUsuarioCreacion(sessionMBean.getSessionUsuarioDto().getId());
                dto.setFechaCreacion(UtilCore.Fecha.obtenerFechaActualDate());
                dto.setTerminalCreacion(sessionMBean.getSessionTerminal());
                UtilCore.General.toUpperCaseDto(dto);
                nuevo(dto);
                mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok");
                to = "";

            } catch (Exception ex) {
                mensajeTrx = ex.getMessage();
                recursosManager.showError(ex.getMessage());
                logger.error(mensajeTrx);

                to = null;
            }
        } else if (sessionMBean.getAccion() == ConstantesSgc.Formulario.EDITAR) {
            try {
                dto.setUsuario(sessionMBean.getSessionUsuarioDto().getId());
                dto.setFecha(UtilCore.Fecha.obtenerFechaActualDate());
                dto.setTerminal(sessionMBean.getSessionTerminal());
                UtilCore.General.toUpperCaseDto(dto);
                editar(dto);
                mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok");
                recursosManager.showMessage(mensajeTrx);

                to = "";
            } catch (Exception ex) {
                mensajeTrx = ex.getMessage();
                recursosManager.showError(ex.getMessage());
                logger.error(mensajeTrx);
                to = null;
            }
        }
        return to;
    }
    public List<GestionTalentoPersonaDto> obtenerListaGestionTalentoReporte(GestionTalentoDto dto) throws DAOException {
        List<Object> listaParametros = new ArrayList<Object>();

        String hqsql = "select e from GestionTalentoPersonaDto as e ";
        hqsql += " where e.gestionTalentoDto.id = "+dto.getId();
        return springHibernateDao.ejecutarQuery(hqsql, listaParametros);
    }
}
